package entity.thread;

public class VisibilityDemo {

    // 关键：使用 volatile 修饰标志位
    private static volatile boolean running = true;

    public static void main(String[] args) throws InterruptedException {

        Thread backgroundThread = new Thread(() -> {
            int count = 0;
            // 如果running被修改，此循环应立即停止
            while (running) { 
                count++;
                // 如果这里没有synchronized块或IO操作，可能永远看不到主线程的修改
            }
            System.out.println("后台线程结束，count=" + count);
        });

        backgroundThread.start();

        // 主线程睡眠1秒，确保后台线程启动
        Thread.sleep(1000);

        // 在主线程修改标志位
        System.out.println("主线程修改running为false");
        running = false; 

        // 等待后台线程结束
        backgroundThread.join();
        System.out.println("主线程结束");
    }
}